package com.hxm.demo.test1;

import java.util.ArrayList;
import java.util.List;

/**
 * description: add a description
 *
 * @author huangxiaoming
 * @version 1.0.0
 * @date 2022/10/11 17:25:40
 */
public class TestAreAlmostEqual {

    /**
     * 1790. 仅执行一次字符串交换能否使两个字符串相等
     *
     * @param args
     */
    public static void main(String[] args) {
        String s1 = "bank", s2 = "kanb";
        System.out.println(areAlmostEqual(s1, s2));
    }

    /**
     * 给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下：选出某个字符串中的两个下标（不必不同），并交换这两个下标所对应的字符。
     * <p>
     * 如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等，返回 true ；否则，返回 false 。
     *
     * @param s1
     * @param s2
     * @return
     */
//    public static boolean areAlmostEqual(String s1, String s2) {
//        if (s1.equals(s2)) {
//            return true;
//        }
//        for (int i = 0; i < s1.length(); i++) {
//            if (s1.charAt(i) != s2.charAt(i)) {
//                for (int j = i + 1; j < s2.length(); j++) {
//                    if (s1.charAt(i) == s2.charAt(j) && s1.charAt(j) == s2.charAt(i)) {
//                        char[] chars = s1.toCharArray();
//                        char c = chars[i];
//                        chars[i] = chars[j];
//                        chars[j] = c;
//                        if (s2.equals(new String(chars))) {
//                            return true;
//                        }
//                    }
//                }
//            }
//        }
//        return false;
//    }

//                    char[] chars = s1.toCharArray();
//                    char c = chars[i];
//                    chars[i] = chars[j];
//                    chars[j] = c;
//                    if (s2.equals(new String(chars))) {
//                        return true;
//                    }
//    for (int j = i + 1; j < s1.length(); j++) {
//        if (s1.charAt(j) != s2.charAt(j)) {
//            if (s1.charAt(i) == s2.charAt(j) && s2.charAt(i) == s1.charAt(j)) return true;
//        }
//    }
    public static boolean areAlmostEqual(String s1, String s2) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < s1.length(); i++) {
            if (list.size() > 2) {
                return false;
            }
            if (s1.charAt(i) != s2.charAt(i)) {
                list.add(i);
            }
        }
        if (list.isEmpty()) {
            return true;
        }
        if (list.size() != 2) {
            return false;
        }

        return s1.charAt(list.get(0)) == s2.charAt(list.get(1)) && s2.charAt(list.get(0)) == s1.charAt(list.get(1));
    }
}
